#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>

int main()
{
	//1. 重设文件权限      umask
	umask(0);
    //2. 创建子进程        fork
    int ret = fork();
    if(ret<0) printf("创建进程失败:%m\n"),exit(-1);
    //3. 结束父进程    
    if(ret>0) printf("父进程结束 守护进程id:%d\n",ret),exit(0);
    if(ret==0)
	{
		//4. 创建新会话        setsid
		setsid();
    	//5. 忽略 SIGCHLD SIGHUP信号  
    	signal(SIGCHLD,SIG_IGN);
    	signal(SIGHUP,SIG_IGN);
    	//6. 改变当前工作目录   chdir
    	chdir("/");
    	//7. 重定向文件描述符号  dup2
    	int fd = open("/dev/NULL",O_RDWR);
    	dup2(fd,0);
    	dup2(fd,1);


    	while(1){
    		sleep(1);//模拟守护进程工作
    	}
    }
	return 0;
}